fn main() {
    //    Macro 宏
    // 1、声明式宏：通过macro_rules!定义
    // 2、过程宏（可以细分为三种类型）
    //      1、自定义的#derive宏:用于结构体或者enum上，为类型自动生成代码
    //      2、类似属性的宏：可以用作任意代码项上的自定义属性
    //      3、类似函数的宏：看起来像函数调用，实际上操作的是传入的代码片段

    // 宏和函数的区别
    //      1、宏是用来编写代码的代码：元编程
    //      2、宏拥有函数无法做到的能力
    //          1、宏可以接收不定数量的参数
    //          2、宏在编译器解释代码意义之前就会被展开
    //      3、定义一个宏比定义函数复杂
    //      4、宏必须在使用前定义好或者导入作用域

    // 这个宏好像js内置了一个babel啊，在调用之前通过语法规则改变代码
}
